﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCuentaBancariaRegistrar : Form
    {
        public CuentaBancaria cuenta { get; set; }
        public int cuenta_id { get; set; }
        public string operacion { get; set; }

        public frmCuentaBancariaRegistrar()
        {
            InitializeComponent();
            cuenta = new CuentaBancaria();
        }

        public frmCuentaBancariaRegistrar(string _operacion, CuentaBancaria _cuenta)
        {
            InitializeComponent();
            operacion = _operacion;

            cuenta = new CuentaBancaria();
            cuenta = _cuenta;
        }

        private void GetLocalidades()
        {
            try
            {
                cmbLocalidad.ValueMember = "id";
                cmbLocalidad.DisplayMember = "localidad";
                cmbLocalidad.DataSource = Localidades.FindAll();

                if (cmbLocalidad.Items.Count != 0)
                {
                    GetZonaPorIdLocalidad((int)cmbLocalidad.SelectedValue);
                }
                else
                {
                    cmbZona.DataSource = null;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void GetZonaPorIdLocalidad(int localidad_id)
        {
            try
            {
                cmbZona.ValueMember = "id";
                cmbZona.DisplayMember = "zona";
                cmbZona.DataSource = Negocio.Zonas.FindAllPorLocalidad(localidad_id);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void frmCuentaBancariaRegistrar_Load(object sender, EventArgs e)
        {
            GetLocalidades();

            if (operacion == "Modificar")
            {
                SetDatosForm();
            }
        }

        private void SetDatosForm()
        {
            txtApellido.Text = cuenta.apellido;
            txtCbu.Text = cuenta.cbu;
            txtDireccion.Text = cuenta.direccion;
            txtDocumento.Text = cuenta.documento;
            txtNombre.Text = cuenta.nombres;
            txtTelefono.Text = cuenta.telefono;
            cmbLocalidad.Text = cuenta.localidad.localidad;
        }

        private Boolean ValidarForm()
        {
            bool resultado = true;
            error.Clear();

            if (string.IsNullOrEmpty(txtNombre.Text))
            {
                resultado = false;
                error.SetError(txtNombre, "Debe completar el campo Nombres.");
                return resultado;
            }

            if (string.IsNullOrEmpty(txtApellido.Text))
            {
                resultado = false;
                error.SetError(txtApellido, "Debe completar el campo Apellido.");
                return resultado;
            }

            if (string.IsNullOrEmpty(txtDocumento.Text))
            {
                resultado = false;
                error.SetError(txtApellido, "Debe completar el campo Apellido.");
                return resultado;
            }

            if (string.IsNullOrEmpty(txtDireccion.Text))
            {
                txtDireccion.Text = "NO INFORMA";
            }

            if (string.IsNullOrEmpty(txtTelefono.Text))
            {
                txtTelefono.Text = "NO INFORMA";
            }

            if (string.IsNullOrEmpty(txtCbu.Text))
            {
                resultado = false;
                error.SetError(txtCbu, "Debe completar el campo C.B.U.");
                return resultado;
            }

            if (txtCbu.Text.Length < 22)
            {
                resultado = false;
                error.SetError(txtCbu, "El nro de C.B.U debe ser de 22 dígitos.");
                return resultado;
            }

            return resultado;
        }

        private void cmbLocalidad_SelectionChangeCommitted(object sender, EventArgs e)
        {
            GetZonaPorIdLocalidad((int)cmbLocalidad.SelectedValue);
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (ValidarForm() == true)
            {
                try
                {
                    if (string.IsNullOrEmpty(operacion))
                    {
                        //cuenta = new CuentaBancaria();

                        cuenta.apellido = txtApellido.Text;
                        cuenta.cbu = txtCbu.Text;
                        cuenta.direccion = txtDireccion.Text;
                        cuenta.documento = txtDocumento.Text;
                        cuenta.fecha_registro = DateTime.Now;
                        cuenta.localidad = (Localidad)cmbLocalidad.SelectedItem;
                        cuenta.nombres = txtNombre.Text;
                        cuenta.telefono = txtTelefono.Text;
                        cuenta.zona = (Zona)cmbZona.SelectedItem;
                        cuenta.activo = 1;

                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    }
                    else
                    {
                        cuenta.apellido = txtApellido.Text;
                        cuenta.cbu = txtCbu.Text;
                        cuenta.direccion = txtDireccion.Text;
                        cuenta.documento = txtDocumento.Text;
                        cuenta.fecha_registro = DateTime.Now;
                        cuenta.localidad = (Localidad)cmbLocalidad.SelectedItem;
                        cuenta.nombres = txtNombre.Text;
                        cuenta.telefono = txtTelefono.Text;
                        cuenta.zona = (Zona)cmbZona.SelectedItem;
                        cuenta.activo = 1;

                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void RegistrarCuenta()
        {
            try
            {
                CuentaBancaria cuenta = new CuentaBancaria();
                cuenta.apellido = txtApellido.Text;
                cuenta.cbu = txtCbu.Text;
                cuenta.direccion = txtDireccion.Text;
                cuenta.documento = txtDocumento.Text;
                cuenta.fecha_registro = DateTime.Now;
                cuenta.localidad_id = (int)cmbLocalidad.SelectedValue;
                cuenta.nombres = txtNombre.Text;
                cuenta.telefono = txtTelefono.Text;
                cuenta.zona_id = (int)cmbZona.SelectedValue;

                int resultado = CuentasBancarias.Add(cuenta);
                if (resultado > 0)
                {
                    MessageBox.Show("Los datos se registraron correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimpiarControles();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al registrar los datos. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void LimpiarControles()
        {
            txtTelefono.Text = string.Empty;
            txtNombre.Text = string.Empty;
            txtDocumento.Text = string.Empty;
            txtDireccion.Text = string.Empty;
            txtCbu.Text = string.Empty;
            txtApellido.Text = string.Empty;
            cmbLocalidad.SelectedItem = 0;
        }

        private void txtDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {

            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtDocumento, "Solo se permiten números en el campo Documento.");
                e.Handled = true;
                return;
            }
        }

        private void txtTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtTelefono, "Solo se permiten números en el campo Teléfono.");
                e.Handled = true;
                return;
            }
        }

        private void txtCbu_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtCbu, "Solo se permiten números en el campo C.B.U.");
                e.Handled = true;
                return;
            }
        }



    }
}
